// 用户
/**  定义唇妆相关的接口 */
const express = require("express");
const router = express.Router();
const Joi = require("joi");
const Response = require("../utils/Response.js");
const cors = require("cors");
// 引入mysql连接池
const pool = require("../utils/db.js");

const jwt = require("jsonwebtoken");
const SECRET_KEY = "JWT_SECRET_KEY";

router.use(cors());
router.use(express.static("public"));

/**
 * 处理登录业务
 */
router.post("/MAC/login", (req, resp) => {
  let { username, password } = req.body;
  // 表单验证
  let schema = Joi.object({
    username: Joi.string().required().pattern(new RegExp("^\\w{3,15}$")), // 必填
    password: Joi.string().required().pattern(new RegExp("^\\w{6,15}$")), // 必填
  });
  let { error, value } = schema.validate(req.body);
  if (error) {
    resp.send(Response.error(400, error));
    return; // 结束
  }
  // 查询数据库，账号密码是否填写正确
  let sql = "select * from mac_client where username=? and password=MD5(?)";
  pool.query(sql, [username, password], (error, result) => {
    if (error) {
      resp.send(Response.error(500, error));
      throw error;
    }
    if (result.length == 0) {
      resp.send(Response.error(1001, "账号密码输入错误"));
    } else {
      // 获取登录用户对象
      let user = result[0];
      user.password = undefined;
      resp.send(Response.ok({ user }));
    }
  });
});

// 查询
router.get("/client/query", (req, res) => {
  var obj = req.query;

  pool.query("select * from Mac_Client where id=?", [obj.id], (err, r) => {
    if (err) {
      throw err;
    }
    console.log(r);
    if (r.length === 0) {
      res.send({
        code: 400,
        msg: "查询失败",
      });
    } else {
      // 接口规范，返回的结果是对象，包含有状态码（人为规定），消息说明，如果需要返回数据，添加查询数据
      res.send({
        code: 200,
        msg: "查询成功",
        data: r,
      });
    }
  });
  // query属于异步操作，需要 把响应的结果放入到回调函数的内部
});
// 模糊查询
router.post("/client/name", (req, resp) => {
  let { name } = req.body;
  //TODO 服务端表单验证  如果验证通过那么继续后续业务  如果验证不通过，则直接返回参数异常
  let schema = Joi.object({
    name: Joi.string().required(), // 必填
  });
  let { error, value } = schema.validate(req.body);
  if (error) {
    resp.send(Response.error(400, error));
    return; // 结束
  }
  // 执行模糊查询
  let sql = "select * from Mac_Client where name like ?";
  pool.query(sql, [`%${name}%`], (err, result) => {
    if (err) {
      resp.send(Response.error(500, error));
      throw err;
    }
    // 将结果封装，返回给客户端
    resp.send(Response.ok(result));
  });
});

// 查询所有
router.get("/client", (req, res) => {
  var obj = req.query;
  console.log(obj);

  pool.query("select * from Mac_Client", [obj], (err, r) => {
    if (err) {
      throw err;
    }
    console.log(r);
    if (r.length === 0) {
      res.send({
        code: 400,
        msg: "查询失败",
      });
    } else {
      // 接口规范，返回的结果是对象，包含有状态码（人为规定），消息说明，如果需要返回数据，添加查询数据
      res.send({
        code: 200,
        msg: "查询成功",
        data: r,
      });
    }
  });
  // query属于异步操作，需要 把响应的结果放入到回调函数的内部
});

// 添加

router.use(
  express.urlencoded({
    extended: true,
  })
);
router.post("/client/add", (req, res) => {
  var { id, name, sex, age, city, phone, email, username, password } = req.body;
  let sql =
    "insert into Mac_Client (id,name,sex,age,city,phone,email,username,password) values (?,?,?,?,?,?,?,?,MD5(?))";
  pool.query(
    sql,
    [id, name, sex, age, city, phone, email, username, password],
    (err, r) => {
      if (err) {
        throw err;
      }
      console.log(r);
    }
  );
  res.send({
    code: 200,
    msg: "添加成功",
  });
});

router.post("/client/del", (req, resp) => {
  let { id } = req.body;

  // 执行删除业务
  let sql = "delete from Mac_Client where id = ?";
  pool.query(sql, [id], (error, result) => {
    if (error) {
      resp.send(Response.error(500, error));
      throw error;
    }
    if (result.affectedRows === 0) {
      resp.send({
        code: 400,
        msg: "删除失败",
      });
    } else {
      resp.send({
        code: 200,
        msg: "删除成功",
        data: result,
      });
    }
  });
});

// 修改
router.post("/client/put", (req, resp) => {
  let { id, name, sex, age, city, phone, email, username, password } = req.body; // post请求参数在req.body中
  id = parseInt(id);
  let sql = `update Mac_Client set username=${username},name=${name},sex=${sex},age=${age},city=${city},phone=${phone},email=${email},password=MD5(${password}) where id=${id}`;
  pool.query(sql, [], (error, result) => {
    if (result.changedRows === 0) {
      resp.send({
        code: 400,
        msg: "修改失败",
      });
    } else {
      resp.send({
        code: 200,
        msg: "修改成功",
        data: result,
      });
    }
  });
});

module.exports = router;
